<script>
	import config from '@/common/config'
	import { mapActions, mapState } from 'vuex'
	import store from '@/store'
	
	export default {
		globalData: {
			userRole: '', // 用户角色
			tabBarHidden: false, // 是否隐藏tabBar
			useCustomTabBar: true, // 是否使用自定义tabBar
			websocket: null, // 全局WebSocket连接对象
			isWebSocketConnected: false, // WebSocket连接状态
		},
		data() {
			return {}
		},
		computed: {
			...mapState('notification', ['notification']),
			...mapState('app', ['currentChatDoctorId'])
		},
		onLaunch: function() {
			console.log('App Launch');
			// 获取用户角色
			this.checkUserRole();
			
			// 隐藏原生tabBar
			if (this.globalData.useCustomTabBar) {
				uni.hideTabBar();
			}
			
			// 初始化WebSocket连接
			this.initWebSocket();
		},
		onShow: function(options) {
			console.log('App Show');
			// 每次显示应用时都检查登录状态
			this.checkUserRole();
			
			// 确保隐藏原生tabBar
			if (this.globalData.useCustomTabBar) {
				uni.hideTabBar();
			}
			
			// 如果WebSocket未连接，尝试重连
			if (!this.globalData.isWebSocketConnected) {
				this.initWebSocket();
			}
		},
		onHide: function() {
			console.log('App Hide');
		},
		onError: function(e) {
			console.log(e);
		},
		methods: {
			...mapActions('app', ['setCurrentChatDoctorId']),
			...mapActions('notification', ['handleWebSocketMessage', 'showNotification', 'hideNotification']),
			
			// 检查用户角色
			checkUserRole() {
				try {
					const token = uni.getStorageSync('token');
					const userInfo = uni.getStorageSync('userInfo');
					
					console.log('登录状态检查 - token:', token);
					console.log('登录状态检查 - userInfo:', userInfo);
					
					if (token) {
					// if (token && userInfo) {
						// 有效登录
						const userData = JSON.parse(userInfo);
						this.globalData.userRole = userData.role || 'patient';
						console.log('当前用户角色:', this.globalData.userRole);
						
						// 根据角色判断是否需要跳转到对应的首页
						const pages = getCurrentPages();
						if (pages.length === 0) {
							// 如果是医生角色，跳转到医生工作台
							if (this.globalData.userRole === 'doctor') {
								uni.reLaunch({
									url: '/pages/doctor/home'
								});
							} else {
								uni.reLaunch({
									url: '/pages/home/home'
								});
							}
						}
					} else {
						// 未登录状态处理
						console.log('未登录，跳转到登录页');
						this.globalData.userRole = '';
						
						// 检查当前是否在登录页，如果不在则跳转到登录页
						const pages = getCurrentPages();
						const currentRoute = pages.length > 0 ? pages[pages.length - 1].route : '';
						
						// 排除登录相关页面和启动页
						const loginRelatedPages = [
							'pages/login/login',
							'pages/login/register',
							'pages/login/forget',
							'pages/start/start',
							'pages/start/guide'
						];
						
						// 修改：不论页面长度如何，只要不在登录相关页面中就强制跳转
						if (!loginRelatedPages.includes(currentRoute)) {
							// 设置一个短延迟确保跳转正常执行
							setTimeout(() => {
								uni.reLaunch({
									url: '/pages/login/login'
								});
							}, 100);
						}
					}
				} catch (e) {
					console.error('获取用户角色失败:', e);
					// 出错时也跳转到登录页
					this.globalData.userRole = '';
					// 使用setTimeout确保跳转正常执行
					setTimeout(() => {
						uni.reLaunch({
							url: '/pages/login/login'
						});
					}, 100);
				}
			},
			
			// 初始化WebSocket连接
			initWebSocket() {
				// 检查配置是否启用WebSocket
				if (!config.websocket) {
					console.log('WebSocket功能未启用，通过配置项config.websocket开启');
					return;
				}
				
				try {
					// 关闭现有连接
					if (this.globalData.websocket) {
						this.globalData.websocket.close();
					}
					
					// 获取用户Token
					const token = uni.getStorageSync('token') || '';
					const userInfo = uni.getStorageSync('userInfo') || '';
					
					console.log(token);
					if (!token) {
					// if (!token || !userInfo) {
						console.warn('未找到用户Token或用户信息，无法建立WebSocket连接');
						return;
					}
					
					// 构建WebSocket URL
					const wsUrl = config.baseUrl.replace(/^http/, 'ws') + 'resource/websocket?clientid='+ config.clientId + '&Authorization=Bearer ' + token;
					console.log('尝试连接WebSocket:', wsUrl);
					
					// 创建WebSocket连接
					this.globalData.websocket = uni.connectSocket({
						url: wsUrl,
						success: () => {
							console.log('WebSocket连接请求已发送');
						},
						fail: (error) => {
							console.error('WebSocket连接请求失败:', error);
						}
					});
					
					// 监听WebSocket事件
					this.globalData.websocket.onOpen(() => {
						console.log('WebSocket连接已建立');
						this.globalData.isWebSocketConnected = true;
						
						// 获取用户ID
						// let userId = 0;
						// try {
						// 	const userInfoObj = JSON.parse(userInfo);
						// 	userId = userInfoObj.userId || userInfoObj.id || 0;
						// } catch (error) {
						// 	console.error('解析用户信息失败:', error);
						// }
						
						// 发送首次连接消息
						const connectMessage = {
							type: 'connect',
							senderId: userId
						};
						this.globalData.websocket.send(JSON.stringify(connectMessage));
					});
					
					this.globalData.websocket.onMessage((res) => {
						console.log('收到res:', res);
						console.log('收到WebSocket消息:', res.data);
						// 使用 Vuex action 处理消息
						this.handleWebSocketMessage(res.data);
					});
					
					this.globalData.websocket.onClose(() => {
						console.log('WebSocket连接已关闭');
						this.globalData.isWebSocketConnected = false;
					});
					
					this.globalData.websocket.onError((error) => {
						console.error('WebSocket连接错误:', error);
						this.globalData.isWebSocketConnected = false;
					});
					
				} catch (error) {
					console.error('初始化WebSocket失败:', error);
				}
			},
			
			// 点击通知，跳转到聊天页面
			onNotificationClick() {
				try {
					// 跳转到对应的聊天页面（使用发送者ID）
					const senderId = this.notification.senderId || 1;
					uni.navigateTo({
						url: `/pages/consultation/chat?id=${senderId}`
					});
					// 隐藏通知
					this.hideNotification();
				} catch (error) {
					console.error('处理通知点击出错:', error);
				}
			}
		}
	}
</script>